from prettytable import PrettyTable

header = ["id", "名称", "简介"]
body = [
    ["101", "嫦娥三号探测器", "嫦娥工程的第三个月球探测器，在月球表面进行软着陆"],
    ["102", "玉兔号月球车", "由嫦娥三号送达月球表面进行探测，它的着陆点被命名为广寒宫"],
    [
        "103",
        "鹊桥卫星",
        "嫦娥四号探测器的中继卫星，为着陆器和月球车提供地月中继通信支持",
    ],
    ["104", "天问一号", "火星探测器，实现了火星软着陆"],
    ["105", "祝融号火星车", "由天问一号送达火星表面进行探测"],
    ["106", "夸父计划", "全天候监测太阳活动的发生及其伴生现象，由三颗卫星组成"],
    [
        "107",
        "天宫空间站",
        "包含天和核心舱、梦天实验舱、问天实验舱、神舟载人飞船和天舟货运飞船",
    ],
    ["108", "长征系列运载火箭", "长征火箭已经拥有退役、现役共计4代20种型号"],
    ["109", "悟空号卫星", "世界上观测能段范围最宽、能量分辨率最优的暗物质粒子探测卫星"],
    ["110", "墨子号卫星", "世界上第一颗空间量子科学实验卫星"],
    ["111", "北斗卫星导航系统", "中国自行研制的全球卫星导航系统"],
]


# 函数：显示所有项目信息，使用PrettyTable模块生成表格并打印输出。
def show_projects():
    print("项目列表:")
    table = PrettyTable()
    table.field_names = header
    for row in body:
        table.add_row(row)
    print(table)


# 函数：添加新项目到列表中，通过用户输入获取项目信息。
def add_project():
    new_id = input("请输入项目ID: ")
    new_name = input("请输入项目名称: ")
    new_desc = input("请输入项目简介: ")
    for project in body:
        if new_id == project[0]:
            print("编号已存在，无法添加")
            return
    body.append([new_id, new_name, new_desc])
    print("添加成功")


# 函数：更新项目信息，修改指定项目ID的项目简介。
def update_project():
    update_id = input("请输入项目ID: ")
    new_desc = input("请输入新的项目简介: ")
    for project in body:
        if update_id == project[0]:
            project[2] = new_desc
            print("更新成功")
            return


# 函数：根据项目ID删除指定项目。
def delete_project():
    delete_id = input("请输入项目ID: ")
    for i, project in enumerate(body):
        if delete_id == project[0]:
            del body[i]
            print("删除成功")
            return
    print("无此项目信息")


# 函数：根据用户输入的关键词搜索项目信息，并用表格形式显示结果。
def search_project():
    keyword = input("请输入关键词: ")
    print(f"查找结果:")
    table = PrettyTable()
    table.field_names = header
    for row in body:
        if keyword in row:
            table.add_row(row)
    print(table)


# 主程序：提供用户交互界面，循环处理用户选择的操作。
def main():
    while True:
        # 主菜单循环，显示选项并处理用户输入
        print("[1]: 显示所有项目信息")
        print("[2]: 用关键字查找项目")
        print("[3]: 添加新项目")
        print("[4]: 更新项目信息")
        print("[5]: 删除项目")
        print("[Q]: 退出")
        choice = input("请输入选项: ")
        if choice == "1":
            show_projects()
        elif choice == "2":
            search_project()
        elif choice == "3":
            add_project()
        elif choice == "4":
            update_project()
        elif choice == "5":
            delete_project()
        elif choice.lower() == "q":
            print("退出系统")
            break
        else:
            print("无效输入，请重新输入")


if __name__ == "__main__":
    main()
